package com.mdd.common.entity.agreement;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.util.Date;

/**
 * 代扣授权签约记录
 * &#064;TableName  alipay_sign_user_agreement_record
 */
@Data
@TableName("alipay_sign_user_agreement_record")
public class AlipaySignUserAgreementRecord implements Serializable {
    /**
     * 编码
     */
    @TableId(value="id", type= IdType.AUTO)
    private Long id;

    /**
     * 销售产品码，商户签约的支付宝合同所对应的产品码。
     */
    private String productCode;

    /**
     * 用户在商户网站的登录账号，用于在签约页面展示，如果为空，则不展示
     */
    private String externalLogonId;

    /**
     * 个人签约产品码，商户和支付宝签约时确定，商户可咨询技术支持。
     */
    private String personalProductCode;

    /**
     * 协议签约场景，商户可根据 代扣产品常见场景值 选择符合自身的行业场景。
     */
    private String signScene;

    /**
     * 商户签约号，代扣协议中标示用户的唯一签约号（确保在商户系统中唯一）。
     * 格式规则：支持大写小写字母和数字，最长32位。
     * 商户系统按需自定义传入，如果同一用户在同一产品码、同一签约场景下，签订了多份代扣协议，那么需要指定并传入该值。
     */
    private String externalAgreementNo;

    /**
     * 签约第三方主体类型。对于三方协议，表示当前用户和哪一类的第三方主体进行签约。
     * 默认为PARTNER。
     */
    private String thirdPartyType;

    /**
     * 当前用户签约请求的协议有效周期。
     * 整形数字加上时间单位的协议有效期，从发起签约请求的时间开始算起。
     * 目前支持的时间单位：
     * 1. d：天
     * 2. m：月
     * 如果未传入，默认为长期有效。
     */
    private String signValidityPeriod;

    /**
     * 芝麻授权信息，针对于信用代扣签约。json格式。buckle_app_id	String	可选	64
     * 商户在芝麻端申请的appId
     * 1001164
     * buckle_merchant_id	String	必选	64
     * 商户在芝麻端申请的merchantId
     */
    private String zmAuthParams;

    /**
     * 签约产品属性，json格式
     * auth_biz_params	String	可选	256
     * 预授权业务信息
     */
    private String prodParams;

    /**
     * 签约营销参数，此值为json格式；具体的key需与营销约定
     */
    private String promoParams;

    /**
     * 请按当前接入的方式进行填充，且输入值必须为文档中的参数取值范围。
     * 扫码或者短信页面签约需要拼装http的请求地址访问中间页面，钱包h5页面签约可直接拼接scheme的请求地址
     * channel	String	必选	20
     * 目前支持以下值：
     * 1. ALIPAYAPP （钱包h5页面签约）
     * 2. QRCODE(扫码签约)
     * 3. QRCODEORSMS(扫码签约或者短信签约)
     */
    private String accessParams;

    /**
     * 此参数用于传递子商户信息，无特殊需求时不用关注。目前商户代扣、海外代扣、淘旅行信用住产品支持传入该参数（在销售方案中“是否允许自定义子商户信息”需要选是）。
     * sub_merchant_id	String	可选	20
     * 子商户的商户id
     * 2088123412341234
     * sub_merchant_name	String	可选	50
     * 子商户的商户名称
     * 滴滴出行
     * sub_merchant_service_name	String	可选	50
     * 子商户的服务名称
     * 滴滴出行免密支付
     * sub_merchant_service_description	String	可选	150
     * 子商户的服务描述
     * 免密付车费，单次最高500
     */
    private String subMerchant;

    /**
     * 设备信息参数，在使用设备维度签约代扣协议时，可以传这些信息
     * device_id	String	可选	256
     * 设备Id
     * device12345
     * device_name	String	可选	128
     * 设备名称
     * 电视
     * device_type	String	可选	128
     * 设备类型
     * 枚举值
     * VR一体机: VR_MACHINE
     * 电视: TV
     * 身份证: ID_CARD
     * 工牌: WORK_CARD
     */
    private String deviceParams;

    /**
     * 用户实名信息参数，包含：姓名、身份证号、签约指定uid。商户传入用户实名信息参数，支付宝会对比用户在支付宝端的实名信息。
     * agreement_effect_type	String	可选	30
     * 协议生效类型, 用于指定协议是立即生效还是等待商户通知再生效. 可空, 不填默认为立即生效.
     * DIRECT
     * user_age_range	String	可选	40
     * 商户希望限制的签约用户的年龄范围，min表示可签该协议的用户年龄下限，max表示年龄上限。如{"min": "18","max": "30"}表示18=<年龄<=30的用户可以签约该协议。
     */
    private String identityParams;
    /**
     * 支付宝系统中用以唯一标识用户签约记录的编号
     */
    private String agreementNo;

    /**
     * 周期管控规则参数period_rule_params，在签约周期扣款产品（如CYCLE_PAY_AUTH_P）时必传，在签约其他产品时无需传入。 周期扣款产品，会按照这里传入的参数提示用户，并对发起扣款的时间、金额、次数等做相应限制。
     * period_type	String	必选	20
     * 周期类型period_type是周期扣款产品必填，枚举值为DAY和MONTH。
     * DAY即扣款周期按天计，MONTH代表扣款周期按自然月。
     * 与另一参数period组合使用确定扣款周期，例如period_type为DAY，period=30，则扣款周期为30天；period_type为MONTH，period=3，则扣款周期为3个自然月。
     * 自然月是指，不论这个月有多少天，周期都计算到月份中的同一日期。例如1月3日到2月3日为一个自然月，1月3日到4月3日为三个自然月。注意周期类型使用MONTH的时候，计划扣款时间execute_time不允许传28日之后的日期（可以传28日），以此避免有些月份可能不存在对应日期的情况。
     * 枚举值
     * 自然日: DAY
     * 自然月: MONTH
     */
    private String periodRuleParams;

    /**
     * 周期数period是周期扣款产品必填。与另一参数period_type组合使用确定扣款周期，例如period_type为DAY，period=90，则扣款周期为90天。
     */
    private String period;

    /**
     * 首次执行时间execute_time是周期扣款产品必填，即商户发起首次扣款的时间。精确到日，格式为yyyy-MM-dd
     * 结合其他必填的扣款周期参数，会确定商户以后的扣款计划。发起扣款的时间需符合这里的扣款计划。
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date executeTime;

    /**
     * 单次扣款最大金额single_amount是周期扣款产品必填，即每次发起扣款时限制的最大金额，单位为元。商户每次发起扣款都不允许大于此金额。
     */
    private String singleAmount;

    /**
     * 总金额限制，单位为元。如果传入此参数，商户多次扣款的累计金额不允许超过此金额。
     */
    private String totalAmount;

    /**
     * 总扣款次数。如果传入此参数，则商户成功扣款的次数不能超过此次数限制（扣款失败不计入）。
     */
    private String totalPayments;

    /**
     * 签约有效时间限制，单位是秒，有效范围是0-86400，商户传入此字段会用商户传入的值否则使用支付宝侧默认值，在有效时间外进行签约，会进行安全拦截；（备注：此字段适用于需要开通安全防控的商户，且依赖商户传入生成签约时的时间戳字段timestamp）
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date effectTime;

    /**
     * 签约状态：0、待签约 1、签约成功 2、签约失败 3、签约取消
     */
    private Integer status;
    /**
     * 用户平台订单id
     */
    private Long orderId;
    /**
     * body
     */
    private String body;

    /**
     * 用户平台订单id
     */
    private Long userId;

    /**
     * 删除标记 0 未删除 1已删除
     */
    private Integer isDelete;
}
